package com.easy.dfc.service;

import com.easy.dfc.Utils.Util;
import com.easy.dfc.mapper.UsersetMapper;
import com.easy.dfc.entity.UsersetWithBLOBs;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;

/**
 * Created by VULCANTSeries on 2017/5/10.
 */
@Service
public class UsersetService {

    @Resource
    private UsersetMapper usersetMapper;

    public boolean VerifyToken(String userid, String token) {
        UsersetWithBLOBs usersetWithBLOBs = usersetMapper.selectByUserId(Util.ToUuidString(userid));
        if (usersetWithBLOBs == null)
            return false;
        String timestamp = token.substring(token.length() - 10);
        if (GenToken(usersetWithBLOBs, timestamp).equals(token)) {
            //有效期1天，超过时间返回false
            if (new Date(Long.parseLong(timestamp) * 1000 + 24 * 60 * 60 * 1000).getTime() > new Date().getTime()) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    private String GenToken(UsersetWithBLOBs usersetWithBLOBs, String timestamp) {

        String SHA256Data = usersetWithBLOBs.getUserid().replaceAll("-", "") + usersetWithBLOBs.getPassword() + timestamp + "bY6gdHNQ5efzKUl0m444Cg6P";
        SHA256Data = SHA(SHA256Data, "SHA-256").replaceAll("-", "").toUpperCase() + timestamp;
        return SHA256Data;

    }

    /**
     * 字符串 SHA 加密
     *
     * @param strSourceText
     * @return
     */
    private String SHA(final String strText, final String strType) {
        // 返回值
        String strResult = null;

        // 是否是有效字符串
        if (strText != null && strText.length() > 0) {
            try {
                // SHA 加密开始
                // 创建加密对象 并傳入加密類型
                MessageDigest messageDigest = MessageDigest.getInstance(strType);
                // 传入要加密的字符串
                messageDigest.update(strText.getBytes());
                // 得到 byte 類型结果
                byte byteBuffer[] = messageDigest.digest();

                // 將 byte 轉換爲 string
                StringBuffer strHexString = new StringBuffer();
                // 遍歷 byte buffer
                for (int i = 0; i < byteBuffer.length; i++) {
                    String hex = Integer.toHexString(0xff & byteBuffer[i]);
                    if (hex.length() == 1) {
                        strHexString.append('0');
                    }
                    strHexString.append(hex);
                }
                // 得到返回結果
                strResult = strHexString.toString();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }

        return strResult;
    }
}
